// 导入数据库操作模块
const db = require('../db/index')

// 导入 bcryptjs 密码加密模块 
const bcrypt = require('bcryptjs')

// 获取order订单列表数据的处理函数 
exports.getorderLists = (req, res) => {
    // 根据分类的状态，获取所有未被删除的分类列表数据
    let param = [ `%${req.body.keywords}%`, `%${req.body.keywords}%` ]
    // is_delete 为 0 表示没有被 标记为删除 的数据
    let total = 'select count(*) as total from order_list where is_delete=0'

    let keyword = ` and (nickname LIKE ? or order_sum LIKE ?)`                           // 条件筛选SQL
    let isVip = ` and isVip=${req.body.isVip}`                                           // 会员筛选SQL
    let sexRadio = ` and sexRadio=${req.body.sexRadio}`                                  // 性别筛选SQL
    let activePay = ` and activePay=${req.body.activePay}`                               // 支付方式筛选SQL
    let getDate = ` and newDay between "${req.body.startData}" and "${req.body.endData}"`// 时间筛选SQL
    if (req.body.keywords && req.body.keywords!='') total += keyword    // 条件筛选
    if (JSON.stringify(req.body.isVip) !== 'null') total += isVip           // 会员筛选
    if (JSON.stringify(req.body.sexRadio) !== 'null') total += sexRadio     // 性别筛选
    if (JSON.stringify(req.body.activePay) !== 'null') total += activePay   // 支付方式筛选
    if (req.body.startData && req.body.endData) total += getDate        // 时间筛选

    total += ` order by order_id asc`
    db.query(total, param, (err, results) => {
        if (err) return res.status(err)
        // 查询成功, 判断查询结果 如果总条数为 0 ,则直接输出
        if (results[0].total===0) {
            res.send({
                status: 0,
                message: '获取order订单列表成功！',
                data: [],
                total: results[0].total,
            })
        }
        req.total = results[0].total
    })
    // 分页处理 
    let pageNo = Number(req.body.page) || 1;
    let pageCount = Number(req.body.pagesize) || 10;
    let pageSize = pageCount;
    let page = (pageNo - 1) * pageCount;

    let sqlStr = `select * from order_list where is_delete=0` 
    if (req.body.keywords && req.body.keywords!='') sqlStr += keyword   // 条件筛选
    if (JSON.stringify(req.body.isVip) !== 'null') sqlStr += isVip          // 会员筛选
    if (JSON.stringify(req.body.sexRadio) !== 'null') sqlStr += sexRadio    // 性别筛选
    if (JSON.stringify(req.body.activePay) !== 'null') sqlStr += activePay  // 支付方式筛选
    if (req.body.startData && req.body.endData) sqlStr += getDate       // 时间筛选
    sqlStr += ` order by order_id asc limit ${page},${pageSize}`;       // 分页查询
    // 查询订单列表     
    db.query(sqlStr, param, (err, results) => {
        // 1. 执行 SQL 语句失败
        if (err) return res.status(err)
        // 2. 执行 SQL 语句成功
        let orderList = results

        // 通过订单编号去查商品列表
        let sqlShop = `select * from order_shop where`
        for (let i = 0,list = orderList; i < list.length; i++) {
            sqlShop += ((i === 0 ? '' : ' or') + ` order_sum="${list[i].order_sum}"`)
        }
        // 查询订单 商品列表
        db.query(sqlShop, (err, results) => {
            // 1. 执行 SQL 语句失败
            if (err) return res.status(err)
            
            // 2. 执行 SQL 语句成功
            // 将 results 中 order_sum 与 req.orderList 相同的组成数组放在下面
            for (let i = 0; i < orderList.length; i++) {
                orderList[i].order_shop = []
                for (let j = 0; j < results.length; j++) {
                    // 判断 order_sum 是否相等
                    if (orderList[i].order_sum == results[j].order_sum) {
                        orderList[i].order_shop.push(results[j])
                    }
                }
            }

            res.send({
                status: 0,
                message: '获取order订单列表成功！',
                data: orderList,
                total: req.total,
            })
        })
    })
}

// 新增订单的处理函数
exports.addorderLists = (req, res) => {
    // 客户是VIP的情况 且选择的是 扣除余额 的情况
    if (req.body.isVip && req.body.activePay===3) {
        // 获取 VIP 用户的余额 SQL
        let getVipMoney = `select money from vip_list where vip_id=${req.body.vipInfo.vip_id}`
        db.query(getVipMoney, (err, results) => {
            if (err) return res.status(err)// 1. 执行 SQL 语句失败
            // 成功,更改余额 (会员余额 - 实收金额)
            let money = results[0].money - req.body.payMoney
            // 更新余额 update haircut.vip_list set money=? where vip_id= ?;
            const update = `update vip_list set money=${money} where vip_id=${req.body.vipInfo.vip_id}`
            db.query(update, (err, results) => {
                // 执行 SQL 语句失败
                if (err) return res.status(err)
            })
        })
    }
    // 定义新增order订单的 SQL 语句：
    let sqlStr = `insert into order_list (activePay, newDay, newHours, order_sum, order_total, payMoney, sexRadio, isVip, vip_id, nickname) values (${req.body.activePay}, "${req.body.newDay}", "${req.body.newHours}", "${req.body.order_sum}", ${req.body.order_total}, ${req.body.payMoney}, ${req.body.sexRadio}, ${req.body.isVip}`
    sqlStr += (req.body.isVip ? `, ${req.body.vipInfo.vip_id}, "${req.body.vipInfo.nickname}");` : `, null, null);`)

    db.query(sqlStr, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.status(err)
        // SQL 语句执行成功

        // 定义新增order_shop 订单商品的 SQL 语句，把订单中的商品插入订单商品表：set_date
        let sql = `insert into order_shop (order_sum, shop_id, shop_name, shop_price, shop_sum, shop_total, set_date) values `
        for (let i = 0,list = req.body.order_shop; i < list.length; i++) {
            sql += `("${list[i].order_sum}", ${list[i].shop_id}, "${list[i].shop_name}", ${list[i].shop_price}, ${list[i].shop_sum}, ${list[i].shop_total}, "${req.body.newDay+' '+req.body.newHours}")`
            if (list.length-1 === i) {
                sql += `;`
            }else{
                sql += `,`
            }
        }
        db.query(sql, (err, results) => {
            // SQL 语句执行失败
            if (err) return res.status(err)
          
            // 新增order订单成功
            res.status('新增order订单成功！', 0)
        })

    })
}

// 删除order订单的处理函数
exports.deleteorderById = (req, res) => {
    // 定义删除order订单的 SQL 语句：
    const sqlStr = `update order_list set is_delete=1 where order_id=?`
    db.query(sqlStr, req.params.order_id, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.status(err)
      
        // SQL 语句执行成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.status('删除order订单失败！')
      
        // 删除order订单成功
        res.status('删除order订单成功！', 0)
    })
      
}


// 更新order订单的处理函数
exports.updateorderById = (req, res) => {
    // 定义查询 order订单 是否已存在的 SQL 语句
    const sqlStr = `select * from order_list where order_id<>? and is_delete=0 and order_name=?`
    // 执行查重操作
    db.query(sqlStr, [req.body.order_id, req.body.order_name], (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.status(err)
        if (results.length === 1) return res.status('订单名称已存在，请更换后重试！')
        // console.log(req.body);
        // 定义更新order订单的 SQL 语句：
        const sql = `update order_list set ? where order_id=?`
        db.query(sql, [req.body, req.body.order_id], (err, results) => {
            // 执行 SQL 语句失败
            if (err) return res.status(err)
            console.log(results);
            // SQL 语句执行成功，但是影响行数不等于 1
            if (results.affectedRows !== 1) return res.status('更新order订单失败！')
          
            // 更新order订单成功
            res.status('更新order订单成功！', 0)
        })
          
    })
  

}